之前我介紹過什麼是api,這次我要介紹如何建立自己的api。這意味著前後端的完全分離,你將不在碰任何有關畫面的東西。
之前我使用PHP原生語法寫題目時,可能會使用PHP語法,導向某個頁面之類的寫法。在之前的範例中,也有使用controller時會return一個view之類的,這些作法都參與了前端的頁面轉換。
現在我們的目的是開出api給前端串接,我們不需要干涉前端,只要return前端要的資料即可。
通常api設計在給前端資料時會使用json格式
controller範例:
public function index()
{
$tasks = Task::all();
return response()->json(['status' => true, 'user_data' => $tasks], 200);
}
你可以使用response()->json
的型式,return一個json的型式。
status code是後端給前端的訊息,發送request後,前端通常看後端給的status code就知道,成功還是失敗,而要是失敗的話是哪種類型的失敗。
通常有幾個status code是通用的,有些後端可能會有自己的status code,那些暫且不論,一開始我們得先知道常用的有哪些。
status code通常分為這幾類:
我自己比較常用的大概就2xx和4xx類,例如成功就回覆200,若是request資料有輸入錯誤,就回覆400(Bad Request)。我就先舉例常用的
有status code就方便前端判斷是那邊出問題了,像500就是server端的問題,4xx系列就是前端的問題。
詳細的status code可以參考:
https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Status
假設request發送和我的api設計不符,可以用if else判斷,給出response
例如:
public function show($id)
{
$task = Task::find($id);
if (!$task) {
return response()->json(['status' => false, 'error' => 'task search not found'], 400);
}
return response()->json(['status' => true, 'task_data' => $task], 200);
}
假設這是找某個task的api,我需要前端給我task的id,好讓我去資料庫找給他,可是若前端給的$id是錯的,db中找不到,就可以回個400給前端,順便給個詳細的錯誤訊息。
還有,這些json內容格式需要找前端討論喔,儘量統一格式,方便前端做串接。將api開出來後,其實還要寫出api文件才算結束,之後會發一篇講如何寫api文件的文章,敬請期待。